iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
0
AI & Data

AI x 日常 x 30天系列 第 21

Epoch 21 - 畫出那雙鞋 x Sketch Me That Shoe

  • 分享至 

  • xImage
  •  

不知不覺來到了21天~
連續介紹了幾天reid的論文,來點不一樣的
Sketch Me That Shoe
這就是論文標題(別懷疑XD)

首先在介紹她的論文之前,先來講一下她的研究動機,
這要從一個她生活中常會遇到的問題開始說,
有一天她走在路上,覺得走在她前面那個人的鞋子很漂亮,她很喜歡想要知道去哪買。
但是又覺得問陌生人很怪,或是拿相機在那拍也非常奇怪。
於是她決定上網搜尋看看。
我們都知道傳統的搜尋是基於文字,需要用文字描述她想要搜尋的東西。

這是她的描述:
一雙露出腳趾,鞋跟中等高,還有花邊的涼鞋。

如果這時候換男生來搜尋,他的描述也許是這樣:
一雙女生的鞋。

這就是本文想解決的核心問題:要如何找到那雙鞋?

這種問題還蠻常見的,不僅是鞋子,也許是包包或是椅子,
當我們在網路購物時,可能已經知道那個東西的樣子,但是你不知道如何描述,去找出你想要的“那樣東西”。
我們也沒有照片可以用圖片搜尋。

那該怎麼辦呢?
那就用畫的!如果能直接畫出那個東西的樣子,然後用那張圖畫去搜尋,
跟用文字描述比起來,用畫的更加直覺,因為人可以很直覺將細節或是形狀畫出來。

作者將這類問題:如何用sketch來做圖片搜尋,稱做
Fine-gained Sketch-based Image Retrieval (SBIR)

其實用sketch來做搜尋其實已經很多人做過了,
但大都是category level的搜尋,只有去辨識出Sketch所屬的類別。

那這篇特別的點是,他是做Instance Level 的搜尋,就是在同一個類別下,
去分辨出每項東西的差異,這是首次有人研究這個題目。

此外,這篇研究的是free-hand sketch,並非電腦產生的邊緣圖或是專業的素描。
也就是一般沒有受過繪畫訓練的人,在沒有參考的情況之下,用手在平板上面畫出來的圖。

所以這種sketch會非常抽象,而且只包含最重要的部分,
還有就是,sketch 與 photo 的問題本質上屬於一個“跨domain”的問題。
photo具有顏色和細節部分,但是sketch 只有白色背景跟黑色的線,所以這是一個很大的 domain gap。

對於fine-grained級別的SBIR,需要有一種衡量sketch和photo之間的相似度的機制。
就像這個範例,


因為它不僅要區分出不同類別的photo,還要能區分同一類別的photo的差異。
而且,目前沒有一個fine-grained level的SBIR dataset可用,
那要建立這樣一個dataset的cost是非常大的。
這些都是他們研究所面臨的挑戰。

這篇論文有兩個主要貢獻:

  1. 建立兩個fine-grained level的SBIR dataset,包含了人工標注的ground true
  2. 提出兩個方法解決訓練資料不足的問題,分段預訓練 以及 基於sketch來擴展資料的方法

Dataset

為了建立SBIR dataset,
首先收集photo 和 sketch 的圖片,總共分為兩類,鞋子和椅子,
他們先從購物網站搜集了photo的圖片
然後雇用志願者畫出sketch,這些人都沒有受過繪畫訓練,且要15秒內在平板上畫出來,
所以在dataset中,每一張的photo 都對應一張sketch

Data Annotation

接著他們對data做標記,使用標記能夠學習出一個更好的model,用來找出最符合sketch的photo。
一般人很難直接去ranking 全部的鞋子photo,但是比較容易從兩張圖片找出較相似的
所以透過兩兩比較的方式,最後就能找出每張sketch對於每張photo的相似度,來排序。
triplet是訓練data的最小單位,
然後每個triplet 包含 一張sketch 跟兩張候選photo。

但找出所有兩兩組合太費工了,所以根據三個步驟去挑選部分的triplet:
1.首先,人工標記photo的屬性,包括鞋高、鞋子類型...等等21種屬性
2.然後根據這些屬性,為每張sketch選出10 個相似的候選photo。
3.最後每張sketch會產生 45個triplet,整個dataset總共32,220 個triplet,
4.接著為每個triplet選出與sketch較相似的photo

Methodology


使用Triplet loss,
簡單來說,他們的目標是拉近anchor和正樣本(positive)之間的距離,擴遠anchor和負樣本(negative)之間距離,來學習出具判別力的feature space。

Architecture


這篇的架構,主要是基於Sketch-a-Net,也是本文作者之前的研究。
本文他們加上了Siamese Network,有三個branch,然後triple分別對應到每個branch,
每個branch都使用Sketch-a-Net去訓練,最終用loss function產生ranking 的結果。

雖然他們建立了sketch dataset,但是data量還是不足以用來訓練model。

他們提出了兩種解決方法,

Staged pre-training strategy

第一個是Staged pre-training,就是先通過無監督的pre-training,然後再通過有監督的fine-tuning,提升了訓練的成果。


分為兩個Stage,共有四個步驟:

stage1:

  1. 在Sketch-A-Net的框架基礎上,用ImageNet-1K的邊緣圖edge maps作為pre-training的訓練數據;
  2. TU-Berlin是一個sketch的dataset ,用來 fine-tuning網絡,
    但是TU-Berlin的資料量也不多,所以要想辦法增加data。
    相較於傳統擴展資料的方法,例如旋轉、位移或是翻轉圖片,
    他們提出了兩種基於sketch擴展資料的方法。
    第一個是筆畫移除,藉由移除部分不重要的筆畫來增加數據,
    根據經驗越短的筆畫越不重要,而且一般人通常是先從外圍開始畫起,
    所以越晚的畫的越可能是細節,所以會優先移除者兩種筆畫。

第二個方法是筆畫變形,他們認為曲率越小的筆畫,變形後對結果的影響越低。
所以一樣能用來增加數據量

他們應用以上兩個方法,就能將一張原圖產生另外九張圖,也就是把原始的數據擴展為12倍,這樣才有足夠的數據用來訓練model。

做完stage1後,獲得三個 branch的初始權重,並且能夠做到category level的辨識。

stage2:

接著要train ranking model,前面說有32000個triplet用來訓練,但是這些數據還是不夠,
所以他們又在其他dataset上面挑選了187個類別用來做訓練數據,約9000張sketch和19000張photo

最後再使用他們建立的SBIR dataset做fine-tuning,得到最終的model。

Result


實驗結果顯示,搜尋結果第一張的正確匹配率,與其他方法比較,可以看出來匹配率有明顯的提升。


若比較前十張正確率,匹配率表現也是相當不錯,有將近88%


這張表顯示每個部分對結果的影響,可以看出兩件事
他們提出的預訓練跟擴展數據的方法,都能有效增加正確匹配率
相較兩兩一對,也就是只有sketch和正樣本的訓練數據,Triplet,也就是包含正負樣本的數據,匹配結果會更好。

作者有提供線上demo,有興趣可以去玩玩:
https://sketchx.eecs.qmul.ac.uk/

我畫的很醜,但搜尋結果還是蠻像的XD


若本文對你有點幫助,請不吝按讚或訂閱哦:)


上一篇
Epoch 20 - 行人重識別論文筆記 x Strong-Baseline
下一篇
Epoch 22 - 論文筆記 x BagNet
系列文
AI x 日常 x 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言